home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2000 / MacHack 2000.toast / pc / The Hacks / Hex Shortcuts (PalmOS) / Src / grfpatch2.c < prev    next >
Text File  |  2000-06-23  |  2KB  |  87 lines

  1. /* Hex Shortcuts
  2.  * Written Jan 2000 by Allon Stern
  3.  * FREEWARE
  4.  * Feel free to use this code for working your own hacks, or
  5.  * extend the functionality!
  6.  * However, please don't distribute modified versions as "Hex Shortcuts" or
  7.  * under my name.
  8.  * If you have ideas you want me to incorporate into Hex Shortcuts, send me
  9.  * email at allon+palm@radioactive.org
  10.  */
  11.  
  12.  
  13. #include <Pilot.h>
  14. #include <SysEvtMgr.h>
  15. #include <Graffiti.h>
  16.  
  17. /***********************************************************************
  18.  *
  19.  *   Internal Constants
  20.  *
  21.  ***********************************************************************/
  22. #define kHackFileCreator        'HexS'
  23. #define kHackCodeID                1001
  24.  
  25. /***********************************************************************
  26.  *
  27.  *   Function Prototypes
  28.  *
  29.  ***********************************************************************/
  30.  
  31. Err MyGrfGetMacro(CharPtr nameP, BytePtr macroDataP, WordPtr dataLenP);
  32.  
  33. Err MyGrfGetMacro(CharPtr nameP, BytePtr macroDataP, WordPtr dataLenP)
  34.  
  35. {
  36.     Err (*oldtrap)(CharPtr, BytePtr, WordPtr);
  37.     DWord temp; // for the feature manager call type checking
  38.     Err err;
  39.     Byte data = 0;
  40.     int looksRight;
  41.  
  42.     // Get the address of the old routine from HackMaster:
  43.     err = FtrGet(kHackFileCreator,kHackCodeID,&temp);
  44.     ErrFatalDisplayIf(err, "can't get real trap address");
  45.     oldtrap=(Err (*)(CharPtr, BytePtr, WordPtr))temp;
  46.  
  47.     looksRight = true;
  48.     if (nameP[0] != '0')
  49.         looksRight = false;
  50.     if (nameP[1] && nameP[1] != 'x')
  51.         looksRight = false;
  52.     if (nameP[1] && nameP[2] && 
  53.         !((nameP[2] >= '0' && nameP[2] <= '9') || (nameP[2] >= 'a' && nameP[2] <= 'f')))
  54.         looksRight = false;
  55.     if (nameP[1] && nameP[2] && nameP[3] &&
  56.         !((nameP[3] >= '0' && nameP[3] <= '9') || (nameP[3] >= 'a' && nameP[3] <= 'f')))
  57.         looksRight = false;
  58.  
  59.     if (looksRight && nameP[0] && nameP[1] && nameP[2] && nameP[3]) {
  60.         if (nameP[2] >= '0' && nameP[2] <= '9')
  61.             data |= (nameP[2] - '0') << 4;
  62.         else if (nameP[2] >= 'a' && nameP[2] <= 'f')
  63.             data |= ((nameP[2] - 'a') + 0x0A) << 4;
  64.         else return oldtrap (nameP, macroDataP, dataLenP);
  65.  
  66.         if (nameP[3] >= '0' && nameP[3] <= '9')
  67.             data |= (nameP[3] - '0');
  68.         else if (nameP[3] >= 'a' && nameP[3] <= 'f')
  69.             data |= ((nameP[3] - 'a'))  + 0x0A;
  70.         else return oldtrap (nameP, macroDataP, dataLenP);
  71.         if (dataLenP) {
  72.             macroDataP[0] = data;
  73.             *dataLenP = 1;
  74.             return 0;
  75.         }
  76.         return oldtrap (nameP, macroDataP, dataLenP);
  77.     }
  78.     
  79.     if (looksRight) {
  80.         return grfErrMacroIncomplete;
  81.     }
  82.  
  83.     return oldtrap (nameP, macroDataP, dataLenP);
  84. }
  85.  
  86.  
  87.